TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE הטכניון - מכון טכנולוגי לישראל הפקולטה למדעי המחשב מרצים: רן אל-יניב, נאדר בשותי מבני נתונים 234218-1 מבחן מועד א' סמסטר חורף תשס"ו מתרגלים: אבי אופשנקו, לורנס בישת, איתן עזריאל, אמיר רובינשטיין שם משפחה: שם פרטי: מס' סטודנט: משך המבחן: שעתיים וחצי. - ברבע השעה האחרונה של המבחן לא נשיב על שאלות. - יש לענות על כל השאלות על טופס המבחן, במקומות המיועדים לכך. - חובה להקפיד על ניסוח וכתב ברורים. תשובות לא קריאות כלל לא תיבדקנה. - שימו לב: 20% מהניקוד של שאלה או סעיף יינתנו אם התשובה היחידה בסעיף זה היא "לא יודע/ת". - מותר להשתמש בכל חומר עזר לא אלקטרוני. - מותר להשתמש במשפטים ותוצאות המופיעים בחומר הרשמי של הקורס (חוברות התרגולים וההרצאות - באיזה משפט/תוצאה ללא הסבר נוסף בתנאי שיצוין מפורשות ופתרונות שפורסמו לתרגילי בית) משתמשים. במבחן זה, סיבוכיות (זמן,זיכרון) מתייחסת תמיד למקרה הגרוע, אלא אם כן נאמר מפורשות אחרת. - במבחן זה מותר להניח כי קריאה לפונקציה לצורך הקצאת זיכרון malloc) למשל) דורשת (1)O זמן, ללא קשר - לכמות הזיכרון שמקצים באמצעותה. 9 עמודים ממוספרים, כולל דף זה. וודאו כי כולם ברשותכם. בטופס זה - ב ה צ ל ח ה! ניקוד בודק שאלה 25 1 25 25 25 100 שאלה 2 שאלה 3 שאלה 4 סה"כ 1
שאלה (25 1 נקודות) יחידת המעקב של האו"ם רוצה לעקוב אחר מועדי הבחירות במדינות השונות בעולם. ידוע שיש בעולם N מדינות דמוקרטיות (בהן נערכות בחירות), המיוצגות ע"י האינדקסים 1 עד N. במדינה i מתקיימות בחירות באופן מחזורי כל D i ימים, כפי שמעוגן בחוקי אותה מדינה. למשל, בישראל עוברים 1424 ימים (4 שנים) בין ימי בחירות עוקבים.. D= max{ D i יהי } הציעו מבנה נתונים למימוש הפעולות הבאות בסיבוכיות הזמן הרשומה ליד כל פעולה. N ו- D אינם קבועים לצורכי ניתוח סיבוכיות. (1)O. סיבוכיות זמן: D. ו- N אתחול מבנה הנתונים עם הפרמטרים Init(N, (D days מציין D i ימים. days) Add_country(i, D i, הוספה למבנה של המדינה, i עם מחזור בחירות בן הערה: את מספר הימים שנותרו עד לבחירות הבאות במדינה i מיום ביצוע פעולה זו. הניחו ש- days הוא שלם המקיים < days D i 0. כמו כן הניחו כי המדינה i לא הוספה למבנה בעבר. סיבוכיות זמן: (1)O. Elections_today() הדפסת האינדקסים של כל המדינות שבהן נערכות בחירות ביום הפעלת הפונקציה. הניחו כי מתבצעת קריאה לפונקציה זו בדיוק פעם אחת בתחילת כל יום, כלומר זוהי הפעולה הראשונה על המבנה באותו יום. סיבוכיות זמן: O(k) כאשר k הוא מס' המדינות המודפסות. days) Predate_elections(i, הקדמה של מערכת הבחירות הקרובה של מדינה i ב- days ימים. הניחו כי (1)O. סיבוכיות זמן: i. הינו שלם חיובי שקטן ממספר הימים שנותרו עד לבחירות הקרובות במדינה days (באו"ם הבחינו שבמדינה קטנה כלשהי במזרח התיכון נוטים להקדים מערכות בחירות באופן תדיר, לכן דרושה פעולה זו). תארו מבנה נתונים מתאים, והסבירו כיצד מתבצעת כל פעולה. תאור מבנה הנתונים 2
הסבר מפורט על ביצוע הפעולות 3
שאלה (25 2 נקודות) הגדרה: מולטיגרף מכוון הינו גרף מכוון בו ייתכנו קשתות מקבילות ולולאות עצמיות. שאלה זו עוסקת באכסון ותחזוק של מולטיגרף מכוון ממושקל בן n צמתים. הציעו מבנה נתונים לביצוע הפעולות הבאות:.O(1) סיבוכיות זמן: Init(n) b ל- a הנחה: אין עדיין במבנה קשת מ- w. במשקל b לצומת a הוספת קשת מצומת AddEdge(a,b,w) במשקל w. סיבוכיות זמן: O(logm) (m הוא מספר הקשתות שיש כרגע בגרף). a אין קשתות בין אם ל- b. a הסרת הקשת הקלה ביותר מבין הקשתות שבין RemoveLightEdge(a,b) ל- b הפעולה לא מבצעת דבר. סיבוכיות זמן:.O(logm) (1)O. זמן: סיבוכיות ל- b. a בדיקה אם יש קשת בין IsConnected(a,b) MinimumSpanningTree() מציאת עץ פורש מינימלי של גרף התשתית (הגרסה הלא מכוונת של הגרף). הפעולה מדפיסה את קשתות העץ כרשימה של שלשות מהצורה,(a,b,w) כאשר a ו- b הם זוג צמתים בעץ הפורש המינימלי שיש בינהם קשת במשקל w. הערה: במימוש פעולה זו הניחו כי הגרף קשיר, כלומר שיש לו עץ פורש. סיבוכיות זמן: log*n).o(min(n 2, (m רמז: למציאת עץ פורש מינימלי של מולטיגרף מספיק להתייחס לגרף הפשוט שמכיל, לכל זוג צמתים, רק את הקשת המינימלית בינהם. סיבוכיות הזיכרון הנדרשת של כל מבנה הנתונים: (m+.o(n 2 תארו מבנה נתונים מתאים, הסבירו כיצד מתבצעת כל פעולה, ונמקו מדוע היא עומדת בדרישות סיבוכיות הזמן. תאור מבנה הנתונים 4
הסבר מפורט על ביצוע הפעולות ועמידה בדרישות הסיבוכיות של כל אחת מהן 5
שאלה (25 3 נקודות) נתונה מטריצה של מספרים שלמים עם m שורות ו- n עמודות, שכל שורה בה ממוינת בסדר עולה. אנו מעוניינים באלגוריתם להדפסת כל איברי המטריצה בסדר ממוין (עולה). n = 5 לדוגמא, בהינתן המטריצה הבאה: 3 5 12 13 50 m = 3 1 4 8 8 14 4 5 10 19 20 הפלט של האלגוריתם יהיה: 1 3 4 4 5 5 8 8 10 12 13 14 19 20 50 א. תארו אלגוריתם לפתרון הבעיה, הפועל בסיבוכיות זמן (m,o(m n log ומשתמש ב- O(m) זיכרון נוסף (כלומר בנוסף למטריצה הנתונה). הוכיחו כי האלגוריתם שלכם עומד בדרישות סיבוכיות הזמן והזיכרון. תאור האלגוריתם והוכחה כי הוא עומד בדרישות סיבוכיות הזמן והזיכרון 6
הניחו כי קיים אלגוריתם ל"מיזוג במקום" merging),(in-place כלומר: עבור שני מערכים ממוינים A ו- B בגדלים n A ו- n, B אלגוריתם זה ממזג אותם בסיבוכיות זמן ) B O(n A n+ וסיבוכיות זיכרון נוסף (1)O, כאשר הפלט מאוחסן באותם תאי הזיכרון של מערכי הקלט ) A n האיברים הקטנים מאוחסנים בתאי הזיכרון של המערך A, וייתר n B האיברים מאוחסנים ב- B). בסעיף זה מותר להשתמש באלגוריתם הנ"ל מבלי לממשו. ב. פתרו שוב את הבעיה מסעיף א', אלא שהפעם פתרונכם נדרש לעבוד בסיבוכיות זיכרון נוסף (1)O. הוכיחו כי האלגוריתם שלכם עומד בדרישות סיבוכיות הזמן והזיכרון. תאור האלגוריתם והוכחה כי הוא עומד בדרישות סיבוכיות הזמן והזיכרון 7
שאלה (25 4 נקודות) שימו לב שני הסעיפים בשאלה זו אינם קשורים זה לזה. השאלה עוסקת במחרוזות מעל א"ב סופי Σ. שתי מחרוזות א. הן s 2 ו- s 1 הזזה ציקלית אחת של השנייה, קיים אם 2 i m, i s 1 = a 1 a 2 a m של השנייה. ו- כך שמתקיים: i-1.s 2 = a i a i+1 a m a 1 a למשל, המחרוזות game ו- mega הן הזזה ציקלית אחת תארו אלגוריתם המקבל כקלט שתי מחרוזות s 1 ו- s 2 באורך m כל אחת ) 2,(s 1 s ומכריע אם הן הזזה ציקלית אחת של השנייה בסיבוכיות זמן.O(m) אין צורך לבדוק את תקינות הקלט. רמז: בנו מ- s 1 מחרוזת חדשה.s 1 ' ' 1 s כך ש- s 2 היא תת-מחרוזת של תאור האלגוריתם 8
ב. ממשו את הפעולות הבאות המגדירות מבנה נתונים לטיפול במחרוזות: (1)O. אתחול מבנה הנתונים. סיבוכיות זמן: Init().O( s ) למבנה. סיבוכיות זמן: s הוספת המחרוזת AddString(s).O( s ) מהמבנה. סיבוכיות זמן: s הוצאת המחרוזת RemoveString(s) IsConcatenation(s) בדיקה האם המחרוזת s הינה שרשור של שתי מחרוזות שנמצאות במבנה. סיבוכיות זמן:.O( s ) תארו את מבנה הנתונים והסבירו כיצד מתבצעת כל פעולה. תאור מבנה הנתונים וביצוע הפעולות 9